package com.imut.lagain.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.imut.lagain.entity.MoodRecord;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 心情记录服务接口
 */
public interface IMoodRecordService extends IService<MoodRecord> {
    
    /**
     * 根据用户ID查询心情记录
     * @param userId 用户ID
     * @param page 分页参数
     * @return 心情记录分页列表
     */
    IPage<MoodRecord> findByUserId(Long userId, Page<MoodRecord> page);
    
    /**
     * 根据用户ID和心情类型查询心情记录
     * @param userId 用户ID
     * @param moodType 心情类型
     * @param page 分页参数
     * @return 心情记录分页列表
     */
    IPage<MoodRecord> findByUserIdAndMoodType(Long userId, String moodType, Page<MoodRecord> page);
    
    /**
     * 查询指定时间范围内的心情记录
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 分页参数
     * @return 心情记录分页列表
     */
    IPage<MoodRecord> findByUserIdAndTimeRange(Long userId, LocalDateTime startTime, LocalDateTime endTime, Page<MoodRecord> page);
    
    /**
     * 查询用户最近的心情记录
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 心情记录列表
     */
    List<MoodRecord> findRecentByUserId(Long userId, Integer limit);
    
    /**
     * 统计用户心情记录数量
     * @param userId 用户ID
     * @return 心情记录数量
     */
    Long countByUserId(Long userId);
    
    /**
     * 查询用户今日心情记录
     * @param userId 用户ID
     * @return 心情记录列表
     */
    List<MoodRecord> findTodayByUserId(Long userId);
    
    /**
     * 查询与伴侣分享的心情记录
     * @param userId 用户ID
     * @param page 分页参数
     * @return 心情记录分页列表
     */
    IPage<MoodRecord> findSharedByUserId(Long userId, Page<MoodRecord> page);
    
    /**
     * 创建心情记录
     * @param moodRecord 心情记录信息
     * @return 创建结果
     */
    boolean createMoodRecord(MoodRecord moodRecord);
    
    /**
     * 更新心情记录
     * @param moodRecord 心情记录信息
     * @return 更新结果
     */
    boolean updateMoodRecord(MoodRecord moodRecord);
    
    /**
     * 删除心情记录
     * @param id 心情记录ID
     * @return 删除结果
     */
    boolean deleteMoodRecord(Long id);
}